Graph-based pattern-oriented, context-sensitive source code completion